package com.itheima.springboot02_01condition.config;

import com.itheima.springboot02_01condition.pojo.Apple;
import com.itheima.springboot02_01condition.pojo.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

/**
 * @author zhangyan
 * @date 2021/3/2 12:47
 */

/**
 * @Configuration:
 *      作用：标记了该注解的类为配置类（等同于 .xml）
 *      位置：标记在类上
 * @Import
 *      作用：引入其他配置类(等同 <import resource="">)
 *      位置：标记在类上
 */
//@Configuration
public class UserConfig {

    @Bean  //把方法的返回值自动存入到IOC容器中(等同于 <bean id="" class="">)
    //@Conditional(UserCondition.class) //条件判断决定是否创建User对象,此注解可以添加在类上和方法上,如果参数中的matches方法 返回true,就创建对象

    //@ConditionalOnMissingBean(Apple.class) //如果没有apple就创建user
    public User createUser(){

        return new User();
    }
}

/**
 * @Conditional 衍生注解
 * - @ConditionalOnProperty：判断配置文件中是否有对应属性和值才初始化Bean
 * - @ConditionalOnClass：判断环境中是否有对应字节码文件才初始化Bean
 * - @ConditionalOnBean：判断环境中有对应Bean才初始化Bean
 * - @ConditionalOnMissingBean：判断环境中没有对应Bean才初始化Bean
 */